﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BussinesCosea
{
    public partial class CoseaDirectos : IDisposable
    {
        #region PreCandidatos

        public List<BuscaPreseleccionadosParaCandidatosResult> BscaPreseleParaCandidatos(string criterio)
        {

            List<BuscaPreseleccionadosParaCandidatosResult> res = new List<BuscaPreseleccionadosParaCandidatosResult>();

            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaPreseleccionadosParaCandidatos(criterio).ToList<BuscaPreseleccionadosParaCandidatosResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BscaPreseleParaCandidatos " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;
        }

        public List<BuscaOrdenesPreseleccionadasXCandidatoOrdenResult> BscaOrdsPreXCandi(int idOrden)
        {

            List<BuscaOrdenesPreseleccionadasXCandidatoOrdenResult> res = new List<BuscaOrdenesPreseleccionadasXCandidatoOrdenResult>();

            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaOrdenesPreseleccionadasXCandidatoOrden(idOrden).ToList<BuscaOrdenesPreseleccionadasXCandidatoOrdenResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BscaOrdsPreXCandi " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;            
        }


        public List<BuscaPreCandidatosResult> BuscaPrecandidatos(string criterio)
        {

            List<BuscaPreCandidatosResult> res = new List<BuscaPreCandidatosResult>();

            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaPreCandidatos(criterio).ToList<BuscaPreCandidatosResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BuscaPrecandidatos " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;
        }

        public List<BuscaActivosEmpResult> BuscaActivosEmp(string criterio)
        {

            List<BuscaActivosEmpResult> res = new List<BuscaActivosEmpResult>();                        
            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaActivosEmp(criterio).ToList<BuscaActivosEmpResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BuscaActivosEmp " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;
        }

        public List<BuscaInActivosEmpResult> BuscaINActivosEmp(string criterio)
        {

            List<BuscaInActivosEmpResult> res = new List<BuscaInActivosEmpResult>();

            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaInActivosEmp(criterio).ToList<BuscaInActivosEmpResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BuscaINActivosEmp " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;
        }

        public List<BuscaTodosEmpResult> BuscaTodosEmp(string criterio)
        {

            List<BuscaTodosEmpResult> res = new List<BuscaTodosEmpResult>();
            BuscaTodosEmpResult v = new BuscaTodosEmpResult();
            
            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                res = db.BuscaTodosEmp(criterio).ToList<BuscaTodosEmpResult>();

            }
            catch (Exception ex)
            {

                throw new Exception("Error al BuscaTodosEmp " + ex.Message);
            }
            finally
            {
                db = null;
            }

            return res;
        }

        public Empleado BuscaEmpleado(int idEmpleado)
        {
            Empleado emp = new Empleado();
            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);
                emp = db.Empleados.Single(c => c.IdEmpleado == idEmpleado);
            }
            catch (Exception ex)
            {
                throw new Exception("Error al BuscaEmpleado " + ex.Message);
            }
            
            return emp;
        }

        public void GuardaPreCandidato(Empleado emp, OrdenServicio ord, SolicitudEmpleo sol,
            ref string SidEmp, ref string SidExp, string comentario = "Expediente recien creado")
        {
            try
            {
                db = new bdCoseaDirectosDataContext(_cadenaConexion);

                emp.IdOrden = ord.IdOrden;
                emp.IdSolicitud = sol.IdSolicitud;
                emp.IdEstadoEmpleado = 1; //Estado de precontratado
                emp.NumeroEmpleado = "000";
                db.Empleados.InsertOnSubmit(emp);
                db.SubmitChanges();

                ExpedienteEmpleado empExp = new ExpedienteEmpleado();
                empExp.IdEmpleado = emp.IdEmpleado;
                empExp.FechaExpediente = DateTime.Now;
                db.ExpedienteEmpleados.InsertOnSubmit(empExp);
                db.SubmitChanges();

                BitacoraExpediente bitExpe = new BitacoraExpediente();
                bitExpe.IdExpediente = empExp.IdExpediante;
                if (_usuarioFirmado == null)
                    bitExpe.IdUsuario = 1; //Usuario por default o principal del sistema
                else
                    bitExpe.IdUsuario = _usuarioFirmado.idUsuario;
                bitExpe.FechaHoraExpediente = DateTime.Now;
                bitExpe.Comentarios = comentario;
                db.BitacoraExpedientes.InsertOnSubmit(bitExpe);
                db.SubmitChanges();

                
                Preseleccion pre = db.Preseleccions.Single(c => c.IdSolicitud == sol.IdSolicitud && c.IdOrden == ord.IdOrden);
                db.Preseleccions.DeleteOnSubmit(pre);                
                db.SubmitChanges();

                EstadoEmpleado(emp.IdEmpleado, 1);

                SidEmp = emp.IdEmpleado.ToString();
                SidExp = empExp.IdExpediante.ToString();

            }
            catch (Exception ex)
            {
                throw new Exception("Error al GuardaPreCandidato " + ex.Message);
            }
        }

        #endregion
    }
}
